package ar.edu.utn.frba.disenio.aterrizar.reserva;

import java.util.ArrayList;
import ar.edu.utn.frba.disenio.aterrizar.usuario.Usuario;
import ar.edu.utn.frba.disenio.aterrizar.aerolineas.Vuelo;
import ar.edu.utn.frba.disenio.aterrizar.excepciones.ReservaNoEncontradaException;
import ar.edu.utn.frba.disenio.aterrizar.fechas.Fecha;
import ar.edu.utn.frba.disenio.aterrizar.reserva.Reserva;

public class ManagerReserva {
	private ArrayList<Vuelo> vuelosReservados;
	
	public ManagerReserva(){
		vuelosReservados = new ArrayList <Vuelo>();
	}
	
	public void agregarReserva(Vuelo unVuelo, Usuario usuario){
		Fecha unaFecha = new Fecha();
		vuelosReservados.add(unVuelo);
		unVuelo.reservarVuelo();
		unVuelo.agregarReserva(new Reserva(usuario, unaFecha.getFechaActual()));
	}
	
	public void agregarSobreReserva(String codigo, Usuario usuario){	
		Fecha unaFecha = new Fecha();
		try{
			Vuelo unVuelo = this.buscarVueloReservado(codigo);
			unVuelo.agregarReserva(new Reserva(usuario, unaFecha.getFechaActual()));
		}
		catch(ReservaNoEncontradaException e){
			System.out.println("No existe la reserva buscada");
		}
	}

	public Vuelo buscarVueloReservado(String codigo){
		
		ArrayList<Vuelo> vuelosReservados = this.getReservas();
		for(Vuelo unVuelo: vuelosReservados){
			if(unVuelo.codigo.equals(codigo)){
				return unVuelo;
			}
		}
		throw new ReservaNoEncontradaException();
	}
	
    public void borrarExpirados(Vuelo vuelo, Fecha fechaExpiracion){
    	try{
        	Vuelo reservaEncontrada = this.buscarVueloReservado(vuelo.codigo);
        	reservaEncontrada.borrarReservasExpiradas(fechaExpiracion);
        }
        catch(ReservaNoEncontradaException e){
        	System.out.println("Reserva no encontrada. No es posible borrar reservas expiradas.");
        }    	
	}
    
    public void borrarSobreReservas(Vuelo vuelo){
    	try{
    	Vuelo reservaEncontrada = this.buscarVueloReservado(vuelo.codigo);
    	reservaEncontrada.borrarSobreReservas();
    	}
    	catch(ReservaNoEncontradaException e){
    		System.out.println("Reserva no encontrada. No es posible borrar sobre reservas.");
    	}
    }

    public ArrayList<Vuelo> getReservas(){
    	return this.vuelosReservados;
    }
    
}
